/*
 * motor.h
 *
 *  Created on: May 15, 2021
 *      Author: soliber
 *      说明：	电机控制API
 *      		以俯视、顺时针方向为角度的正方向
 */

#ifndef BSP_MOTOR_MOTOR_H_
#define BSP_MOTOR_MOTOR_H_

#include "main.h"

/*----------------------宏定义------------------------*/
//电机选择
#define 	MOT1				0x01							//淋洗柱架电机
#define 	MOT2				0x02							//样品盘电机


/*----------------------API声明------------------------*/
/*
 * 函数名：	HAL_Motor_Init
 *
 * 说明：	初始化电机
 * 			所有电机顺时针旋转，检测到零点后停下，并设置当前位置为零点
 *
 * 参数：	timeout，超时时间，单位ms
 *
 * 返回值：	HAL_OK：初始化成功
 * 			HAL_TIMEOUT：初始化超时
 * 			其他：初始化失败
 */
HAL_StatusTypeDef HAL_Motor_Init(uint32_t timeout);

/*
 * 函数名：	HAL_Motor_GetPos
 * 说明：	查询电机当前位置
 *
 * 参数：	mot，本次要查询的电机
 * 			取值可以为MOT1、MOT2
 *
 *
 * 返回值：	该电机的当前位置，单位°
 */
float HAL_Motor_GetPos(uint8_t mot);

/*
 * 函数名：	HAL_Motor_SetPos_Sync
 * 说明：	控制电机1运动到指定的角度，电机2同步运动
 *
 * 参数：	pos，希望移动到的角度（相对零点，向下移动为正），单位°
 * 			取值范围为-180.0~180.0
 *
 * 返回值：	实际移动到的角度，单位°
 */
float HAL_Motor_SetPos_Sync(float pos);

/*
 * 函数名：	HAL_Motor_GetDelta
 * 说明：	查询电机2相对于电机1的角度差
 *
 * 参数：	无
 *
 * 返回值：	电机2的角度-电机1的角度，单位°
 * 			注：以俯视、顺时针方向为角度的正方向
 */
float HAL_Motor_GetDelta(void);

/*
 * 函数名：	HAL_Motor_SetDelta
 * 说明：	设置电机2相对于电机1的角度差
 * 			设置完成后电机1不动，电机2移动到对应位置
 *
 * 参数：	delta，电机2相对于电机1的角度差，单位°
 * 			取值范围为-180.0~180.0
 *
 * 返回值：	电机2的角度-电机1的角度，单位°
 * 			注：以俯视、顺时针方向为角度的正方向
 */
float HAL_Motor_SetDelta(float delta);

#endif /* BSP_MOTOR_MOTOR_H_ */
